import request from "../utils/request";

/**
 * 封装课程管理相关的API请求 (使用独立参数)
 */
class CourseRequest {

    /**
     * 新增课程
     * @param {string} courseCode - 课程代码，唯一
     * @param {string} courseName - 课程名称
     * @param {number} credits - 学分 (例如: 4.0, 2.5)
     * @param {string} courseType - 课程类型 (如: "公共基础课", "专业核心课")
     * @returns {Promise<object>} - 创建成功的课程完整对象
     */
    async add(courseCode, courseName, credits, courseType) {
        const newCourse = await request({
            url: '/courses',
            method: 'post',
            data: {
                courseCode,
                courseName,
                credits,
                courseType
            },
        });
        return newCourse;
    }

    /**
     * 查询课程列表（分页、筛选）
     * @param {object} [options={}] - 包含分页和筛选参数的对象
     * @param {number} [options.page=1] - 页码
     * @param {number} [options.size=10] - 每页数量
     * @param {string} [options.courseName] - 按课程名称模糊查询
     * @param {string} [options.courseCode] - 按课程代码精确查询
     * @returns {Promise<object>} - 标准分页列表数据 { total, pages, current, size, records }
     */
    async getList({ page, size, courseName, courseCode } = {}) {
        const listData = await request({
            url: '/courses',
            method: 'get',
            params: {
                page,
                size,
                courseName,
                courseCode
            },
        });
        return listData;
    }

    /**
     * 获取单个课程详情
     * @param {number|string} id - 课程的主键ID
     * @returns {Promise<object>} - 单个课程的详细信息对象
     */
    async getById(id) {
        const courseDetail = await request({
            url: `/courses/${id}`,
            method: 'get',
        });
        return courseDetail;
    }

    /**
     * 更新课程信息
     * @param {number|string} id - 要更新的课程ID
     * @param {object} courseData - 包含要更新字段的对象。
     * 例如: { courseName: '新名称', credits: 5.0 }
     * @returns {Promise<object>} - 更新后的课程对象
     */
    async update(id, courseData) {
        const updatedCourse = await request({
            url: `/courses/${id}`,
            method: 'put',
            data: courseData,
        });
        return updatedCourse;
    }

    /**
     * 删除课程
     * @param {number|string} id - 要删除的课程ID
     * @returns {Promise<null>} - 成功时返回 null (根据204 No Content响应)
     */
    async delete(id) {
        const result = await request({
            url: `/courses/${id}`,
            method: 'delete',
        });
        return result;
    }
}

// 导出类的实例，方便在其他地方直接调用方法
export default new CourseRequest();